package com.zenithmind.note.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.note.pojo.dto.NoteTagDTO;
import com.zenithmind.note.pojo.entity.NoteTag;
import com.zenithmind.note.pojo.query.NoteTagQuery;
import com.zenithmind.note.pojo.vo.NoteTagVO;

import java.util.List;
import java.util.Map;

/**
 * 笔记标签服务接口
 */
public interface NoteTagService extends IService<NoteTag> {
    
    /**
     * 创建标签
     * 
     * @param tagDTO 标签数据
     * @return 标签ID
     */
    String createTag(NoteTagDTO tagDTO);
    
    /**
     * 更新标签
     * 
     * @param tagDTO 标签数据
     */
    void updateTag(NoteTagDTO tagDTO);
    
    /**
     * 删除标签
     * 
     * @param id 标签ID
     */
    void deleteTag(String id);
    
    /**
     * 获取标签详情
     * 
     * @param id 标签ID
     * @return 标签详情
     */
    NoteTagVO getTagDetail(String id);
    
    /**
     * 分页查询标签列表
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    PageResult<NoteTagVO> tagPage(NoteTagQuery query);
    
    /**
     * 获取用户的标签列表，包含笔记数量
     * 
     * @param userId 用户ID，传null表示当前登录用户
     * @return 标签列表
     */
    List<NoteTagVO> getUserTags(String userId);
    
    /**
     * 获取系统预设标签列表
     * 
     * @return 系统预设标签列表
     */
    List<NoteTagVO> getSystemTags();
    
    /**
     * 获取标签统计信息
     * 
     * @param userId 用户ID，传null表示当前登录用户
     * @return 标签统计信息
     */
    List<NoteTagVO> getTagStats(String userId);
    
    /**
     * 获取标签云数据
     * 
     * @param userId 用户ID，传null表示当前登录用户
     * @return 标签云数据
     */
    List<Map<String, Object>> getTagCloud(String userId);
} 